/*
 * main.cpp
 *
 *  Created on: 07/10/2013
 *      Author: santiago
 */

#include <iostream>
#include <string>

#include "Menu/menues.h"
#include "CapadeAplicacion/Sistema.h"
#include "CargaMasiva/Cargar_Archivo.h"

#define LINEA_AYUDA "Escriba './TPDatos -h' para obtener más ayuda."
#define PARAM_INVALIDO "Error: Parámetro(s) Inválido(s)."

using namespace std;

int main(int argc, const char** argv) {

	Sistema sistema;

	if (argc > 1){

		cout << endl;
		cout << " - Sistema de anuncios clasificados de servicios - " <<endl;
		cout << endl;

		/*CARGA MASIVA:
		 * 1er Parámetro:
		 *     -ip: Personas     -> Alta de Personas (Usuarios, Proveedores y Administradores)
		 *     -ic: Categorías   -> Alta de Categorías
		 *     -is: Servicios    -> Alta de Servicios
		 *     -iq: Consultas    -> Alta de Consultas
		 *	   -iz: Cotizaciones -> Alta de Consultas
		 *
		 * 2do Parámetro:
		 * 		Ruta al archivo
		 */

		//Verifico la cantidad de parámetros.
		if ((argc == 2))
		{
			string param1(argv[1]);
			if (!param1.compare("-h"))
			{
				cout << "Sintaxis:" <<endl;
				cout << endl;
				cout << "   ./TPDatos [-ip|-ic|-is|-iq|-h] [ruta y nombre de archivo]" <<endl;
				cout << endl;
				cout << " Sin Parámetros:" <<endl;
				cout << "     Se realiza el ingreso al menú de la aplicación." <<endl;
				cout << endl;
				cout << " 1er Parámetro: "<< endl;
				cout << "     -ip: Alta Masiva de Personas (Usuarios, Proveedores y Administradores)" << endl;
				cout << "     -ic: Alta Masiva de Categorías" << endl;
				cout << "     -is: Alta Masiva de Servicios" << endl;
				cout << "     -iq: Alta Masiva de Servicios" << endl;
				cout << "     -iz: Alta Masiva de Cotizaciones" << endl;
				cout << "     -h:  Mostrar Pantalla de ayuda" << endl;
				cout << endl;
				cout << " 2do Parámetro: "<< endl;
				cout << "     -[ruta y nombre de archivo]: Ruta y nombre de Archivo válidos, para el proceso de carga masiva." << endl;
				cout << endl;
			}
			else
			{
				cout << PARAM_INVALIDO << endl;
				cout << LINEA_AYUDA << endl;
			}
			return 0;
		}




		//Verifico la cantidad de parámetros.
		if ((argc == 2) or (argc > 3))
		{
			cout << PARAM_INVALIDO << endl;
			cout << LINEA_AYUDA << endl;
			return -1;
		}

		//Cantidad correcta de Parametros:
		//	cout << "PARAMETROS" << endl;
		string param1(argv[1]);
		//cout << "Parametro 1: " << param1 << endl;
		string param2(argv[2]);
		//    cout << "Parametro 2: " << param2 << endl;


		//1er Parametro
		//Verififco si el parametro 1 es correcto:

		// Valores Permitidos: -ip, -is , -ic, -iq, -h
		if  (!(!param1.compare("-ip") or !param1.compare("-is")
				or !param1.compare("-ic") or !param1.compare("-iq")
				or !param1.compare("-iz")
				))
		{
			cout << PARAM_INVALIDO << endl;
			cout << LINEA_AYUDA << endl;
			return -1;
		}

		//2do Parametro
		//Verififco si existe el archivo:
		ifstream f(param2.c_str());
		if (f.good())
		{
				cout << "Archivo Válido." << endl;
		}
		else
		{
				cout << "El Archivo no existe." << endl;
				f.close();
				return -1;
		}
		cout << endl;
		cout << "PROCESO DE CARGA MASIVA" << endl;
		cout << "=======================" << endl;
		cout << endl;

		//Ejecuto el programa de Carga Masiva de acuerdo a los parametros ingresados.
		if (!param1.compare("-ip"))
		{
			cout << "Carga Masiva de Personas" <<endl;
			Cargar_Archivo::cargar_personas(sistema, param2);
		}
		else
		{
			if (!param1.compare("-is"))
			{
				cout << "Carga Masiva de Servicios" <<endl;
				Cargar_Archivo::cargar_servicios(sistema, param2);
			}
			else
			{
				if (!param1.compare("-ic"))
						{
							cout << "Carga Masiva de Categorias" <<endl;
							Cargar_Archivo::cargar_categorias(sistema, param2);
						}
					else
					{
						if (!param1.compare("-iq"))
						{
							cout << "Carga Masiva de Consultas" <<endl;
							Cargar_Archivo::cargar_consultas(sistema, param2);
						}
						else
						{
							cout << "Carga Masiva de Cotizaciones" <<endl;
							Cargar_Archivo::cargar_cotizaciones(sistema, param2);
						}
					}
			  }
		}
	}
	else
	{
		//cout << "sin parámetros --> Programa Principal" << endl;
		Menues::menu_inicio(sistema);
	}
	return 0;
}
